MariaDB
==============================================

一：常用工具（mysql --> mysqld）

1.1：客户端程序
            mysql: 交互式的CLI工具
            mysqldump: 备份工具，基于mysql协议向mysqld发起查询请求，将查得的数据转换成insert等写操作语句保存文本文件中
            mysqladmin：基于mysql协议管理mysqld
            mysqlimport: 数据导入工具

1.2：非客户端类的管理工具
            myisamchk, myisampack

1.3：如何获取程序默认使用的配置
            mysql --print-defaults
            mysqld --print-defaults


                如何获取程序默认使用的配置：
                    mysql --print-defaults
                    mysqld --print-defaults

                客户端类应用程序的可用选项：
                    -u, --user=
                    -h, --host=
                    -p, --passowrd=
                    -P, --port=
                    --protocol=
                    -S, --socket=
                    -D, --database=
                    -C, --compress

                    mysql -e "SQL"

                mysql的使用模式：
                    交互式模式：
                        可运行命令有两类：
                            客户端命令：
                                \h, help
                            服务器端命令：
                                SQL, 需要语句结束符；
                    脚本模式：
                        # mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql
                        mysql> source /path/from/somefile.sql

                服务器端(mysqld)：工作特性有多种定义方式
                    命令行选项
                    配置文件参数

                        获取可用参数列表：
                            mysqld --help --verbose

                    获取运行中的mysql进程使用各服务器参数及其值：
                        mysql> SHOW GLOBAL VARIABLES;
                        mysql> SHOW [SESSION] VARIABLES;

                        注意：其中有些参数支持运行时修改，会立即生效；有些参数不支持，且只能通过修改配置文件，并重启服务器程序生效；
                              有些参数作用域是全局的，且不可改变；有些可以为每个用户提供单独的设置；

                    修改服务器变量的值：
                        mysql> help SET

                        全局：
                            mysql> SET GLOBAL system_var_name=value;
                            mysql> SET @@global.system_var_name=value;
                        会话：
                            mysql> SET [SESSION] system_var_name=value;
                            mysql> SET @@[session.]system_var_name=value;

                    状态变量：用于保存mysqld运行中的统计数据的变量；
                        mysql> SHOW GLOBAL STATUS;
                        mysql> SHOW [SESSION] STATUS;

MariaDB [(none)]> help;
    ?         (\?) Synonym for `help'.
    clear     (\c) Clear the current input statement.
    connect   (\r) Reconnect to the server. Optional arguments are db and host.
    delimiter (\d) Set statement delimiter.
    edit      (\e) Edit command with $EDITOR.
    ego       (\G) Send command to mysql server, display result vertically.
    exit      (\q) Exit mysql. Same as quit.
    go        (\g) Send command to mysql server.
    help      (\h) Display this help.
    nopager   (\n) Disable pager, print to stdout.
    notee     (\t) Don't write into outfile.
    pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
    print     (\p) Print current command.
    prompt    (\R) Change your mysql prompt.
    quit      (\q) Quit mysql.
    rehash    (\#) Rebuild completion hash.
    source    (\.) Execute an SQL script file. Takes a file name as an argument.
    status    (\s) Get status information from the server.
    system    (\!) Execute a system shell command.
    tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
    use       (\u) Use another database. Takes database name as argument.
    charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
    warnings  (\W) Show warnings after every statement.
    nowarning (\w) Don't show warnings after every statement.

MariaDB [(none)]> help contents;
categories:
   Account Management
   Administration
   Compound Statements
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Help Metadata
   Language Structure
   Plugins
   Procedures
   Table Maintenance
   Transactions
   User-Defined Functions
   Utility



二：数据类型
MariaDB [(none)]> help data types;
   AUTO_INCREMENT
   BIGINT
   BINARY
   BIT
   BLOB
   BLOB DATA TYPE
   BOOLEAN
   CHAR
   CHAR BYTE
   DATE
   DATETIME
   DEC
   DECIMAL
   DOUBLE
   DOUBLE PRECISION
   ENUM
   FLOAT
   INT
   INTEGER
   LONGBLOB
   LONGTEXT
   MEDIUMBLOB
   MEDIUMINT
   MEDIUMTEXT
   SET DATA TYPE
   SMALLINT
   TEXT
   TIME
   TIMESTAMP
   TINYBLOB
   TINYINT
   TINYTEXT
   VARBINARY
   VARCHAR
   YEAR DATA TYPE

        字符型
        数值型
        日期时间型
        内建类型

        mysql> SHOW CHARACTER SET;
        mysql> SHOW COLLATION;

 



SQL: DDL, DML
        DDL: 数据定义语言；
            CREATE, ALTER, DROP

            DB组件：数据库、表、索引、视图、用户、存储过程、存储函数、触发器、事件调度器等

            CREATE相关的常用命令：
               CREATE DATABASE
               CREATE EVENT
               CREATE FUNCTION
               CREATE FUNCTION UDF
               CREATE INDEX
               CREATE PROCEDURE
               CREATE SERVER
               CREATE TABLE
               CREATE TABLESPACE
               CREATE TRIGGER
               CREATE USER
               CREATE VIEW


        DML：数据操作语言；
            INSERT, DELETE, UPDATE, SELECT

        数据库：
            CREATE, ALTER, DROP
                {DATABASE|SCHEMA} 
                [IF EXISTS]
                [IF NOT EXISTS]




三：索引

    单进程多线程：
        用户连接：连接线程   

        MySQL数据文件类型：
            数据文件、索引文件
            重做日志、撤消日志、二进制日志、错误日志、查询日志、慢查询日志、(中继日志)

    DDL & DML:
        索引管理：
                按特定数据结构存储的数据；

            索引类型：
                聚集索引、非聚集索引：数据是否与索引存储在一起；
                主键索引、辅助索引
                稠密索引、稀疏索引：是否索引了每一个数据项；
                B+ TREE、HASH、R TREE
                简单索引、组合索引

                左前缀索引
                覆盖索引

            管理索引的途径：
                创建索引：创建表时指定；CREATE INDEX
                创建或删除索引：修改表的命令
                删除索引：DROP INDEX

                查看表上的索引：
                    SHOW {INDEX | INDEXES | KEYS}
                        {FROM | IN} tbl_name
                        [{FROM | IN} db_name]
                        [WHERE expr]

                EXPLAIN

        视图：VIEW
            虚表

            创建方法：
                CREATE
                    VIEW view_name [(column_list)]
                    AS select_statement
                    [WITH [CASCADED | LOCAL] CHECK OPTION]

            删除视图：
                DROP VIEW [IF EXISTS]
                    view_name [, view_name] ...
                    [RESTRICT | CASCADE]

            视图中的数据事实上存储于“基表”中，因此，其修改操作也会针对基表实现；其修改操作受基表限制；





WHERE
多表查询
子查询
联合查询：UNION





MySQL存储引擎


    表类型：
        CREATE TABLE ... ENGINE[=]STORAGE_ENGINE_NAME...
        SHOW TABLE STATUS [LIKE|WHERE]
    
    InnoDB：
        数据存储于“表空间(table space)”中；
            (1) 所有InnoDB表的数据和索引存储于同一个表空间中；
                表空间文件：datadir定义的目录下
                    文件：ibddata1, ibddata2, ...
            (2) 每个表单独使用一个表空间存储表的数据和索引；
                innodb_file_per_table = ON
                
                数据文件（存储数据和索引）：tbl_name.ibd 
                表格式定义：tbl_name.frm
                
                文件存储于数据库目录中：
                
        事务型存储引擎，适合处理大量的短期事务；
        基于MVCC支持高并发；支持所有的四个隔离级别，默认级别为REPEATABLE READ；间隙锁防止幻读；
        使用聚集索引（主键索引）
        支持“自适应hash索引”
        锁粒度：行级锁；
        
        注意：percona, percona-server
            InnoDB --> XtraDB
            
            MariaDB (InnoDB --> XtraDB)
            
        数据存储：表空间 
        并发：MVCC，间隙锁 
        索引：聚集索引、辅助索引
        性能：预读操作、自适应hash索引、插入缓存区
        备份：支持热备（xtrabackup）
        
    MyISAM：
        支持全文索引（FULLTEXT index）、压缩、空间函数（GIS）；
        不支持事务
        锁粒度：表级锁；
        崩溃后无法安全恢复
        
        适用场景：只读（或者读多写少）、较小的表（可以接受较长时间的修复操作）；
        
            注意：MariaDB, Aria(crash-safe tables)
            
        文件：每表三个文件，存储于数据库目录中；
            tbl_name.frm：表格式定义
            tbl_name.MYD：数据文件
            tbl_name.MYI：索引文件
            
        特性：
            加锁和并发：表级锁
            修复：手功或自动修复、但可能会丢失数据
            索引：非聚集索引
            延迟更新索引
            表压缩

        行格式：dynamic, fixed, compressed, compact, redundent
        
    其它的存储引擎：
        CSV：将普通的CSV文件（字段基于逗号分隔）作为MySQL表使用；
        MRG_MYISAM：由多个MyISAM表合并形成的虚拟表；
        BLACKHOLE：类似于/dev/null，不真正存储任何数据；
        MEMORY：基于内存存储，支持hash索引，表级锁；常用于临时表；
        PERFORMANCE_SCHEME：
        ARCHIVE：只支持SELECT和INSERT操作，支持行级锁；
        FEDERATED：用于访问其它的远程的MySQL Server的代理接口，它通过创建一个到远程MySQL Server的客户端连接，并将查询语句传输至远程服务器执行；
        
    MariaDB支持的其它存储引擎：
        OQGraph
        SphinxSE
        TokuDB
        Cassandra
        CONNECT
        SQUENCE     
        
        搜索引擎：
            lucene
            sphinx 
            
    并发控制：
        锁类型：
            读锁：共享锁，可共享给其它的读操作；
            写锁：独占锁
            
        锁粒度：
            表级锁
            行级锁
            
        锁策略：在锁粒度及数据安全性之间寻求的一种平均机制；
            每种存储引擎都可自行实现其锁策略和锁粒度；
            
            MySQL在服务器级也实现了锁，但仅支持表级锁；支持显式请求；
            
        锁类型：
            显式锁：用户手动请求；
            隐式锁：存储引擎自行根据需求施加的锁；
            
        显式锁使用：
            (1) LOCK TABLES
                LOCK TABLES
                tbl_name [[AS] alias] lock_type
                [, tbl_name [[AS] alias] lock_type] ...

                lock_type:
                READ [LOCAL]
                | [LOW_PRIORITY] WRITE

                UNLOCK TABLES           
                        
            (2) FLUSH TABLES
                FLUSH TABLES tbl_name[,...]  [WITH READ LOCK][FOR UPDATE]
            
            (3) SELECT
                SELECT clause [FOR UPDATE] [WITH READ LOCK]
                
MySQL事务
    
    事务：一组原子性的SQL查询，或者多个SQL语句组成了一个独立的工作单元；
        
        事务日志：将随机写转换为顺序写；
        
    ACID测试：
        A：automicity，原子性；整个事务中的所有操作要么全部成功执行，要么全部失败后回滚；
        C：consistency，一致性，数据库总是从一个一致性状态转换为另一个致性状态； 
        I：isolation，隔离性，一个事务所做出的操作在提交之前，是不能为其它事务所见；隔离有多种级别，主要是为了并发；
        D：durability，持久性，事务一旦提交，其所做的修改会永久保存于数据库中；
        
    事务：
        启动事务：START TRANSACTION
        结束事务：
            (1) 完成，提交：COMMIT
            (2) 未完成，回滚：ROLLBACK
        事务支持savepoint：
            SAVEPOINT identifier；
            ROLLBACK TO [SAVEPOINT] identifier
            RELEASE SAVEPOINT identifier
            
        建议：显式请求和提交事务，不要使用自动提交功能；
            autocommit = {ON|OFF}
            
        事务的隔离级别：
            READ UNCOMMITTED （读未提交） --> 脏读
            READ COMMITTED （读提交）--> 不可重复读 
            REPEATABLE READ （可重复读） --> 幻读
            SERIALIZABLE （可串行化） --> 
            
        设置隔离级别：tx_isolation，默认为第三级别；
            READ-UNCOMMITTED
            READ-COMMITTED
            REPEATABLE-READ
            SERIALIZABLE
            
        查看InnoDB存储引擎的状态信息：
            SHOW ENGINE innodb STATUS;
            
            A， B
            P1, P2
                P1：A， 
                P2：B，
                
                死锁：两个或多个事务在同一资源相互占用，并请求锁定对方占用的资源的状态；
            
        事务日志：
            innodb_log_file_size                      5242880
            innodb_log_files_in_group                 2
            innodb_log_group_home_dir            ./ 
            
        
                    



MySQL用户和权限管理

    权限类别：
        库级别
        表级别
        字段级别
        管理类
        程序类

用户账号

创建用户
用户重命名
删除用户
修改密码
授权
取消授权




查询缓存







MariaDB日志
log-bin=mysql  设置名称
binlog-do-db=test  设置某个库

查看是否启用了日志命令：mysql>show variables like 'log_bin'; 
查看当前的日志命令：mysql> show master status; 
看二进制日志文件用mysqlbinlog命令：shell>mysqlbinlog mysql-bin.000007


备份和恢复：



MySQL Replication：



show master status;



主从复制：
~]# vi /etc/my.cnf
[mysqld]
log_bin=master-bin
server_id=1
innodb_file_per_table=ON
skip_name_resolve=ON

~]# systemctl start mariadb.service

mysql]# show global variables like  '%log%';
| log_bin                                   | ON 
MariaDB [(none)]> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |     30379 |
| master-bin.000002 |   1038814 |
| master-bin.000003 |       245 |
+-------------------+-----------+

查看当前所处位置。
~]# show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |      507 |              |                  |
+-------------------+----------+--------------+------------------+


MariaDB [(none)]> show global variables like '%server%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| character_set_server | latin1            |
| collation_server     | latin1_swedish_ci |
| server_id            | 1                 |
+----------------------+-------------------+
3 rows in set (0.00 sec)

授权复制用户
~]# grant replication slave,replication client on *.* to 'repluser'@'172.18.21.%' identified by 'replpass';
~]# flush privileges;

172.18.21.71
relay-log=relay-log
relay-log-index=relay-log.index
server_id=2
innodb_file_per_table=ON
skip_name_resolve=ON

指定主节点：
MariaDB [(none)]> help change master to;
Name: 'CHANGE MASTER TO'
Description:
Syntax:
CHANGE MASTER TO option [, option] ...

option:
    MASTER_BIND = 'interface_name'
  | MASTER_HOST = 'host_name'
  | MASTER_USER = 'user_name'
  | MASTER_PASSWORD = 'password'
  | MASTER_PORT = port_num
  | MASTER_CONNECT_RETRY = interval
  | MASTER_HEARTBEAT_PERIOD = interval
  | MASTER_LOG_FILE = 'master_log_name'
  | MASTER_LOG_POS = master_log_pos
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | MASTER_SSL = {0|1}
  | MASTER_SSL_CA = 'ca_file_name'
  | MASTER_SSL_CAPATH = 'ca_directory_name'
  | MASTER_SSL_CERT = 'cert_file_name'
  | MASTER_SSL_KEY = 'key_file_name'
  | MASTER_SSL_CIPHER = 'cipher_list'
  | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
  | IGNORE_SERVER_IDS = (server_id_list)

server_id_list:
    [server_id [, server_id] ... ]

指定主节点信息。
~]# change master to master_host='172.18.21.70', master_user='repluser', master_password='replpass', master_log_file='master-bin.000003', master_log_pos=497;

查看从节点状态
~]# show slave status\G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

启动：
~]# start slave;





create table user(
id int(11) unsigned not null auto_increment,
user char(30) not null default '',
primary key(`id`)
);
insert into user (user) value ('a'),('b'),('c');

限制从服务器为只读。
show global variables like 'read-only';
设置 read_only=ON




~]# cd /var/lib/mysql/
mysql]# cat master.info 
mysql]# cat relay-log.info

~]# show global variables like 'sync_master_info';
~]# show global variables like '%relay_log%';
+----------------------------------+----------------+
| Variable_name                    | Value          |
+----------------------------------+----------------+
| innodb_recovery_update_relay_log | OFF            |
| max_relay_log_size               | 0              |
| relay_log                        | relay-log      |
| relay_log_index                  |                |
| relay_log_info_file              | relay-log.info |
| relay_log_purge                  | ON             |
| relay_log_recovery               | OFF            |
| relay_log_space_limit            | 0              |
| sync_relay_log                   | 0              |
| sync_relay_log_info              | 0              |
+----------------------------------+----------------+





主主复制：
    rm -rf /var/log/mysql/*


互为主从：
    1：数据不一致风险，
    2：自动增长id
        配置一个节点使用奇数id
            auto_increment_offset=1
            auto_increment_increment=1
        另一个节点使用偶数id
            auto_increment_offset=2
            auto_increment_increment=1

172.18.21.70
log_bin=master-bin
relay-log=relay-log
#relay-log-index=relay-log.index
server_id=1
innodb_file_per_table=ON
skip_name_resolve=ON
auto_increment_offset=1
auto_increment_increment=1

172.18.21.71
log_bin=master-bin
relay-log=relay-log
#relay-log-index=relay-log.index
server_id=2
innodb_file_per_table=ON
skip_name_resolve=ON
auto_increment_offset=2
auto_increment_increment=1



半同步复制：
    主从结构
    安装插件help install
    (master 主节点)：
        ~]# install plugin rpl_semi_sync_master soname 'semisync_master.so';
        显示安装的插件
        ~]# show plugins;
    (slave 从节点)
        ~]# install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

主：
MariaDB [(none)]> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+

从：
MariaDB [(none)]> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+

主：
~]# show global status like '%semi%';

开启：
    主：
        ~]# set global rpl_semi_sync_master_enabled=1;
    从：
        ~]# set global rpl_semi_sync_slave_enabled=1;
        ~]# start slave;

主节点：
MariaDB [(none)]> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 393   |
| Rpl_semi_sync_master_net_wait_time         | 1179  |
| Rpl_semi_sync_master_net_waits             | 3     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 490   |
| Rpl_semi_sync_master_tx_wait_time          | 980   |
| Rpl_semi_sync_master_tx_waits              | 2     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 3     |
+--------------------------------------------+-------+



复制过滤器：
    1：主服务器仅向二进制日志记录特定数据库（表）的事件
        binlog_do_db=       # 数据白名单（逗号隔开）
        binlog_ignore_db=  # 数据黑名单（逗号隔开）
    2：从服务器sql_thread在replay中继日志的时间中，仅读取特定数据库（表）事件。
        replicate_do_db=          # 数据白名单（逗号隔开）
        replicate_ignore_db=    # 数据黑名单（逗号隔开）

    ~]# set global replicate_do_db=mydb;


ssl 加密复制
MariaDB [(none)]> show global variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+


授权复制用户必须通过ssl
~]# grant replication slave,replication client on *.* to 'repluser'@'172.18.21.%' identified by 'replpass' REQUIRE SSL;
~]# flush privileges;


复制相关的文件：
    master.info：保存slave连接master的相关信息
    relay-log.info：保存当前slave节点已经复制的当前二进制日志和本地relay log日志对应关系。

复制的监控和维护：
    （1）清理日志（清理到）
        ~]# purge binary logs to 'master-bin.000002';
    （2）复制监控
        ~]# show master status
        ~]# show binlog events;
        ~]# show binary logs;
        ~]# show slave status;
        ~]# show processlist;
    （3）从服务器是否落后于主服务器。
        ~]# show slave status;
            Seconds_Behind_Master: 0
    （4）确定主从节点是否一致
            Percona Tools
    （5）

===========================
mysql 分布式系统
    cap：一致性，可用性，网络分区容错性。


切分：
    垂直切分：分库
    水平切分：分表，sharding
       工具： cobar, gizzard,...
    
Mysql 复制：

MMM：
MHA：
    主节点监控，迁移节点。
Galera Cluster：wresp协议


https://segmentfault.com



node1: MHA Manager
node2: MariaDB slave
node3: MariaDB slave
node4:MariaDB slave

172.18.21.70 node1.magedu.com node1
172.18.21.71 node1.magedu.com node2
172.18.21.72 node1.magedu.com node3
172.18.21.73 node1.magedu.com node4

生成秘钥
~]# ssh-keygen -t rsa -P ''
~]# cat .ssh/id_rsa.pub > .ssh/authorized_keys
~]# chmod 600 .ssh/authorized_keys

~]# scp -p .ssh/id_rsa .ssh/authorized_keys node2:/root/.ssh
~]# scp -p .ssh/id_rsa .ssh/authorized_keys node3:/root/.ssh
~]# scp -p .ssh/id_rsa .ssh/authorized_keys node4:/root/.ssh

~]# ssh node2 'ifconfig'
~]# ssh node3 'ifconfig'
~]# ssh node4 'ifconfig'

Master 节点：
    innodb_file_per_table=1
    skip_name_resolve=1
    log-bin=master-bin
    relay-log=relay-bin
    server_id=1

Slave 节点：
    innodb_file_per_table=1
    skip_name_resolve=1
    log-bin=master-bin
    relay-log=relay-bin
    server_id=2
    read-only=1
    relay-log-purge=0


MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |      245 |              |                  |
+-------------------+----------+--------------+------------------+

用户授权：
~]# grant replication slave,replication client on *.* to 'repluser'@'172.18.21.%' identified by 'replpass';
~]# flush privileges;


指定主节点信息。
~]# change master to master_host='172.18.21.70', master_user='repluser', master_password='replpass', master_log_file='master-bin.000003', master_log_pos=245;
~]# show slave status;
~]# start slave;

主节点管理权限账号：
    ~]#  grant all on *.* to 'mhauser'@'172.18.21.%' identified by 'mhapass';








user=mhauser
  3 password=mhapass
  4 manager_workdir=/data/masterha/app1
  5 manager_log=/data/masterha/app1/manager.log
  6 remote_workdir=/data/masterha/app1
  7 ssh_user=root
  8 repl_user=repluser
  9 repl_password=replpass
 10 ping_interval=1





MariaDB 集群
  mysql5.6+ MariaDB 10+
  一从多主（一般不考虑）
  多线程复制（依赖GITD）

衡量数据库的指标
  qps：
  tps：

压测工具：
  sysbench

Galera Cluster
    percona-cluster
    MariaDB-Cluster


需要3个节点：
    172.18.21.40
    172.18.21.41
    172.18.21.42

yum -y install wget
wget ftp://172.18.0.1/pub/Sources/7.x86_64/galera_cluster/MariaDB-5.5.46-centos7-x86_64-client.rpm
wget ftp://172.18.0.1/pub/Sources/7.x86_64/galera_cluster/MariaDB-Galera-5.5.46-centos7-x86_64-server.rpm
wget ftp://172.18.0.1/pub/Sources/7.x86_64/galera_cluster/MariaDB-5.5.46-centos7-x86_64-client.rpm


[MariaDB]
name=MariaDB
baseurl=ftp://172.18.0.1/pub/Sources/7.x86_64/galera_cluster/
gpgcheck=0


时间同步：
地址解析：vi /etc/hosts
172.18.21.40 node1.magedu.com node1
172.18.21.41 node1.magedu.com node2
172.18.21.42 node1.magedu.com node3


~]# yum install MariaDB-Galera-server
[root@localhost source]# rpm -ql MariaDB-Galera-server
/etc/init.d/mysql

[root@localhost source]# rpm -ql galera | grep -i smm.so
/usr/lib64/galera/libgalera_smm.so


[galera]
# Mandatory settings
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://172.18.21.40, 172.18.21.41, 172.18.21.42"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="mycluster"

# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0

复制配置到其他节点：

初始化：（主节点启动）
  /etc/rc.d/init.d/mysql start --wsrep-new-cluster

其他节点：
  service mysql start


























































































===================================================
~]# yum -y install ncurses-devel openssl-devel libevent-devel jemailoc-devel cmake


cmake














































































































https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/


wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-client.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-common.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-compat.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-devel.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-server.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-shared.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-5.5.49-centos7-x86_64-test.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-Galera-5.5.49-centos7-x86_64-server.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/MariaDB-Galera-5.5.49-centos7-x86_64-test.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/galera-25.3.15-1.rhel7.el7.centos.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/jemalloc-3.6.0-1.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.49/yum/centos7-amd64/rpms/jemalloc-devel-3.6.0-1.el7.x86_64.rpm









[root@localhost ~]# service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@localhost ~]# 
